#include <iostream>
#include <vector>
#include "Thread.hpp"

using namespace bit_thread;

#define NUM 4

pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
int ticketnum = 1000; // 共享资源

void Ticket()
{
    while (true)
    {
        // 加锁
        pthread_mutex_lock(&lock);
        // 多线程判断或修改共享资源，都是临界区
        if (ticketnum > 0)
        {
            usleep(1000);
            // 抢票
            printf("抢票,id:%d\n", ticketnum--);

            // 模拟入库 
        }
        else
        {
            //解锁
            pthread_mutex_unlock(&lock);
            break;
        }
        //解锁
        pthread_mutex_unlock(&lock);
    }
}

int main()
{
    // 定义一把锁
    pthread_mutex_t lock;
    // 初始化锁
    pthread_mutex_init(&lock, nullptr);
    // 1.构建线程对象
    std::vector<Thread> thread;
    for (int i = 0; i < NUM; i++)
    {
        thread.emplace_back(Ticket);
    }

    // 2.启动线程
    for (auto &i : thread)
    {
        i.start();
    }
    // 3.等待线程
    for (auto &i : thread)
    {
        i.join();
    }
    // 销毁锁
    pthread_mutex_destroy(&lock);
    return 0;
}